package com.time.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.time.domain.News;
import com.time.service.NewsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 高磊
 * @Description 新闻信息 controller
 * @since 2020-10-19
 */

@Controller
@RequestMapping("/news")
public class NewsController {

    @Autowired
    private NewsService newsService;

    /**
     * @param model 封装对应ID新闻数据
     * @param id    新闻ID
     * @return 请求转发至相应ID新闻页面
     * @Description 根据新闻ID查询新闻信息给前台
     */
    @GetMapping("/news_info")
    public String newsInfo(Model model, Integer id) {
        News news = newsService.getById(id);

        model.addAttribute("news", news);
        return "news-view";
    }

    /**
     * @param model 封装所有分页新闻数据
     * @param page  当前页和每页显示数量
     * @return 请求转发至后台新闻列表页面
     * @Description 分页查询所有新闻数据给后台
     */
    @RequestMapping("/list")
    public String list(Model model, Page<News> page) {
        // 由于页面无法选择每页显示数据，所以默认每页显示4条留言数据
        page.setSize(4);
        Page<News> newsPage = newsService.page(page);

        model.addAttribute("newsPage", newsPage);
        model.addAttribute("totalPage", newsPage.getPages());

        return "manage/news";
    }

    /**
     * @param model ID不为空时，封装回显的新闻数据
     * @param id    新闻ID
     * @return ID为空时，请求转发至添加页面，否则请求转发至更新页面
     * @Description 根据新闻ID是否为空，跳转至相应面
     */
    @RequestMapping("/input")
    public String input(Model model, Integer id) {
        if (id == null) {
            return "manage/news-add";
        } else {
            News news = newsService.getById(id);
            model.addAttribute("news", news);
            return "manage/news-modify";
        }
    }

    /**
     * @param news 添加或更新的新闻对象
     * @return 根据添加或更新结果，请求转发至相应页面
     * @Description 添加或更新新闻数据
     */
    @GetMapping("/update")
    public String update(News news) {
        boolean addNews = false;    //添加新闻结果
        boolean updateNews = false; //更新新闻结果

        if (news.getId() == null) {
            addNews = newsService.save(news);
        } else {
            updateNews = newsService.updateById(news);
        }

        // 根据添加或更新结果，请求转发至相应页面
        return JumpPage.backJumpPage(addNews || updateNews);
    }

    /**
     * @param id 新闻ID
     * @return 根据删除结果，请求转发至相应页面
     * @Description 根据新闻ID删除新闻数据
     */
    @GetMapping("/delete")
    public String delete(Integer id) {
        boolean removeNews = newsService.removeById(id);

        // 根据删除结果，请求转发至相应页面
        return JumpPage.backJumpPage(removeNews);
    }
}
